﻿//************************************************************************************************************
// CoNatural.Data.dll
// Author: Roger Torres
//************************************************************************************************************
// You can use, modify, and distribute the source code and executable programs based on the source code.
// This source code is provided "as is" and without warranties as to performance or merchantability. 
// The author and/or distributors of this source code may have made statements about this source code. 
// Any such statements do not constitute warranties and shall not be relied on by the user in deciding 
// whether to use this source code. This source code is provided without any express or implied warranties 
// whatsoever. Because of the diversity of conditions and hardware under which this source code may be used, 
// no warranty of fitness for a particular purpose is offered. The user is advised to test the source code 
// thoroughly before relying on it. The user must assume the entire risk of using the source code.
//************************************************************************************************************

using System;
using System.Data;
using System.Reflection;
using System.Data.SqlClient;

namespace CoNatural.Data.SqlClient {
	public class SqlClientParameter : Parameter {
		internal protected SqlClientParameter(string name, Type type, ParameterAttribute parameterAttribute) : base(name, type, parameterAttribute) { }

		/// <summary>
		/// Handles special Sql Server types
		/// </summary>
		protected override void MapDbType(ParameterAttribute parameterAttribute) {
			switch (Type.Name) {
				case "SqlHierarchyId":
					IsNullable = false;
					DbType = DbType.Object;
					UdtName = "HierarchyId";
					break;

				case "SqlGeography":
					IsNullable = false;
					DbType = DbType.Object;
					UdtName = "Geography";
					break;

				case "SqlGeometry":
					IsNullable = false;
					DbType = DbType.Object;
					UdtName = "Geometry";
					break;

				default:
					base.MapDbType(parameterAttribute);
					UdtName = null;
					break;
			}
		}

		//public override IParameter Clone() {
		//   return new SqlClientParameter(this);
		//}
	}
}
